//
//  ViewController.m
//  06实现裁剪图片并生成新图片
//
//  Created by apple on 15-6-8.
//  Copyright (c) 2015年 itcast. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIImageView* imgViewIcon;

@end

@implementation ViewController

// 在按钮的单击事件中裁剪图片
- (IBAction)btnClick:(id)sender
{
    // 1. 加载要进行裁剪的图片
    UIImage* img = [UIImage imageNamed:@"me"];

    CGFloat margin = 5;

    // 2. 创建一个比实际图片略大的图片上下文
    CGSize ctxSize = CGSizeMake(img.size.width + 2 * margin, img.size.height + 2 * margin);
    // 开启一个图形上下文
    UIGraphicsBeginImageContextWithOptions(ctxSize, NO, 0.0);
    // 获取当前的图形上下文
    CGContextRef ctx = UIGraphicsGetCurrentContext();

    // 3. 绘制一个圆环(Arc)
    // 3.1 确定圆心
    CGPoint centerP = CGPointMake(ctxSize.width * 0.5, ctxSize.height * 0.5);
    // 3.2 半径
    CGFloat radius = MIN(img.size.width, img.size.height) * 0.5;
    // 3.2 画圆
    UIBezierPath* pathOutside = [UIBezierPath bezierPathWithArcCenter:centerP radius:radius startAngle:0 endAngle:M_PI * 2 clockwise:YES];
    // 3.3 设置外层圆的线宽和颜色
    CGContextSetLineWidth(ctx, 2 * margin);
    [[UIColor redColor] set];
    // 3.4 把路径添加到上下文中
    CGContextAddPath(ctx, pathOutside.CGPath);

    // 4. 执行一次渲染，把圆环渲染到设备上
    CGContextDrawPath(ctx, kCGPathStroke);

    // 5. 在上下文绘制一个用来裁剪的圆形
    UIBezierPath* pathInside = [UIBezierPath bezierPathWithArcCenter:centerP radius:radius startAngle:0 endAngle:M_PI * 2 clockwise:YES];
    // 5.1 把pahtInside这个圆添加到上下文中
    CGContextAddPath(ctx, pathInside.CGPath);

    // 6. 执行裁剪
    CGContextClip(ctx);

    // 7. 把图片绘制到"上下文"中
    [img drawAtPoint:CGPointMake(margin, margin)];

    // 8. 从上下文中取出绘制好的图形
    UIImage* imgCliped = UIGraphicsGetImageFromCurrentImageContext();

    // 8.2 关闭，结束上下文
    UIGraphicsEndImageContext();

    // 9. 保存图片
    self.imgViewIcon.image = imgCliped;

    // 10. 保存到相册和沙盒
    // 把图片保存到相册中
    //UIImageWriteToSavedPhotosAlbum(imgCliped, nil, nil, nil);
    UIImageWriteToSavedPhotosAlbum(imgCliped, self, @selector(image:didFinishSavingWithError:contextInfo:), @"Hello");

    // 把图片保存到磁盘上
    // - 把图片保存到沙盒里面
    // 1. 获取沙河路径
    NSString* docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    NSString* fileName = [docPath stringByAppendingPathComponent:@"cliped2.png"];
    // 把图片转换为一个二进制数据
    NSData* imgData = UIImagePNGRepresentation(imgCliped);
    [imgData writeToFile:fileName atomically:YES];
    NSLog(@"%@", fileName);
}

// 裁剪一个普通的圆图片
- (void)test1
{
    // 1. 加载要裁剪的图片
    UIImage* imgIcon = [UIImage imageNamed:@"dst2"];

    // 2. 开启（创建）一个图片的图形上下文
    CGFloat len = MIN(imgIcon.size.width, imgIcon.size.height);

    UIGraphicsBeginImageContextWithOptions(imgIcon.size, NO, 0.0);

    // 3. 在上下文中绘制一个要裁剪的图形
    // 圆心
    CGPoint centerP = CGPointMake(imgIcon.size.width * 0.5, imgIcon.size.height * 0.5);
    // 半径
    CGFloat radius = MIN(imgIcon.size.width, imgIcon.size.height) * 0.5;

    // 绘制一个圆
    UIBezierPath* pathCircle = [UIBezierPath bezierPathWithArcCenter:centerP radius:radius startAngle:0 endAngle:M_PI * 2 clockwise:YES];
    // 获取当前上下文
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    // 把要裁剪的圆形添加到当前上下文
    CGContextAddPath(ctx, pathCircle.CGPath);

    // 4. 执行裁剪
    CGContextClip(ctx);

    // 5. 把图片绘制到图形上下文中
    [imgIcon drawAtPoint:CGPointZero];

    // 6. 把图形上下文中的绘制好的图形取出来
    UIImage* imgCliped = UIGraphicsGetImageFromCurrentImageContext();

    //---------- 把图片上下文最终裁剪成一个"正方形" ---------------------------------
    //    CGImageRef img=  CGImageCreateWithImageInRect(imgCliped.CGImage, <#CGRect rect#>);
    //    UIImage *ii = [UIImage imageWithCGImage:img ];
    //---------- 把图片上下文最终裁剪成一个"正方形" ---------------------------------

    // 7. 关闭图形上下文(销毁，释放)
    UIGraphicsEndImageContext();

    // 8. 保存
    // 把图片显示到图片框中
    self.imgViewIcon.image = imgCliped;

    // 把图片保存到相册中
    //UIImageWriteToSavedPhotosAlbum(imgCliped, nil, nil, nil);
    UIImageWriteToSavedPhotosAlbum(imgCliped, self, @selector(image:didFinishSavingWithError:contextInfo:), @"Hello");

    // 把图片保存到磁盘上
    // - 把图片保存到沙盒里面
    // 1. 获取沙河路径
    NSString* docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    NSString* fileName = [docPath stringByAppendingPathComponent:@"cliped.png"];
    // 把图片转换为一个二进制数据
    NSData* imgData = UIImagePNGRepresentation(imgCliped);
    [imgData writeToFile:fileName atomically:YES];
    NSLog(@"%@", fileName);
}

- (void)image:(UIImage*)image didFinishSavingWithError:(NSError*)error contextInfo:(void*)contextInfo
{
    NSLog(@"save ok, 错误信息: %@----%@", error, contextInfo);
}
//- (void)afterSaved
//{
//    NSLog(@"save ok");
//}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end
